﻿using gregn6Lib;
using NursingFormSystem.Common;
using NursingFormSystem.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace NursingFormSystem.PICCBloodPurification
{
    public partial class PrintPICCBoold : Form
    {
        #region 变量声明
        private GridppReport Report = new GridppReport();    //引用 gregn6Lib
        NurFormsService.NursingForm formService = new NurFormsService.NursingForm();
        PatientInfo PatientInfo;
        DateTime Start;
        DateTime End;
        #endregion

        #region 构造函数
        public PrintPICCBoold(PatientInfo Patient, DateTime StartDate, DateTime EndDate)
        {
            InitializeComponent();
            PatientInfo = Patient;
            Start = StartDate;
            End = EndDate;
            //载入报表模板数据
            Report.LoadFromFile(System.Windows.Forms.Application.StartupPath + @"\GRFModel\Ydhl_GRF\泉州市第一医院PICU血液净化治疗护理记录单.grf");
            //设置与数据源的连接串，因为在设计时指定的数据库路径是绝对路径。
            Report.ConnectionString = Utility.GetDatabaseConnectionString();
            //连接报表取数事件
            Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
            Report.PageProcessRecord += Report_PageProcessRecord;
            //设定查询显示器关联的报表
            axGRPrintViewer1.Report = Report;
        }
        #endregion

        #region 连接报表取数事件
        private void ReportFetchRecord()
        {
            var ret = formService.GetNursingFormRecordByDate(PatientInfo.PATIENT_ID, Convert.ToInt32(PatientInfo.VISIT_ID), (int)FormType.BloodPurification, Start, End);
            DataTable dt = new DataTable();
            if (ret.Code == 1)
            {
                CreateDateTableHead(dt);
                List<NursingFormRecord> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<NursingFormRecord>>(ret.D);
                list = list.OrderBy(p => p.AssessmentDate).ToList();
                //治疗模式  血管通路  滤器型号  抗凝方式 取最新一条数据
                BloodPurification new_ps = XmlUtil.XMLToObject<BloodPurification>(list[0].NursingFormData, Encoding.UTF8);
                for (int i = 0; i < list.Count; i++)
                {
                    NursingFormRecord rd = list[i];
                    BloodPurification ldf = XmlUtil.XMLToObject<BloodPurification>(rd.NursingFormData, Encoding.UTF8);
                    dt.Rows.Add(
                                rd.PatientName,
                                PatientInfo.SEX,               //sex
                                PatientInfo.AGE,              //age
                                PatientInfo.PATIENT_ID,             //PatientId
                                PatientInfo.DIAGNOSE,            //DIAGNOSE
                                new_ps.ZhiLiaoMoShi,          //治疗模式  最新
                                new_ps.XueGuanTongLu,         //血管通路
                                new_ps.GuoLvHingHao,      //过滤型号
                                new_ps.KangNingFangShi,      //抗凝方式
                                ldf.RiQi,                 //日期
                                DateTimeHelper.HHmmssToHHmm(ldf.ShiJian),//时间
                                ldf.ShengMingTiZhengT,    //生命体征--T
                                ldf.ShengMingTiZhengHR,   //生命体征--HR
                                ldf.ShengMingTiZhengR,    //生命体征--R
                                ldf.ShengMingTiZhengBP,   //生命体征BP
                                ldf.YaLiJianCeShuRuYa,    //压力检测--输入压
                                ldf.YaLiJianCeHuiShuYa,   //压力检测--回输压
                                ldf.YaLiJianCeTMP,        //压力监测--TMP
                                ldf.ChuFangXueLiuLiang,   //处方--血量了
                                ldf.ChuFangPBP,           //处方--PBP
                                ldf.ChuFangTouXiYe,       //处方--透析液
                                ldf.ChuFangZhiHuanYeQian, //处方--置换液--前
                                ldf.ChuFangZhiHuanYeHou,  //处方--置换液--后
                                ldf.ChuFangTuoShuiLiang,  //处方--脱水量
                                ldf.ChuFangKangNingJi,    //处方--抗凝剂
                                ldf.BingQingGuanChaJiChuLi,        //处方--病情观察及处理
                                ldf.HuShi,                //护士
                                ldf.ShangYeHuShi,         //上夜护士
                                ldf.XiaYeHuShi,            //下夜护士
                                ldf.Num,                    //次数
                                ldf.IsNewPageFlag           //是否另起一次
                    );
                }
                //将 DataTable 的数据转储到 Grid++Report 的数据集中
                dt.DefaultView.Sort = "RiQi ASC,ShiJian ASC";
                DataTable data = dt.DefaultView.ToTable();
                Utility.FillRecordToReport(Report, data);
            }
            else if (ret.Code == 2)
            {
                DataRow dr = dt.NewRow();
                dt.Rows.Add(dr);
                Utility.FillRecordToReport(Report, dt);
            }
            else if (ret.Code == 0)
            {
                MessageBox.Show(ret.M);
            }
        }
        #endregion

        #region 创建列头
        private static void CreateDateTableHead(DataTable dt)
        {
            dt.Columns.Add("PatientName", typeof(string));             //患者姓名
            dt.Columns.Add("sex", typeof(string));                     //患者性别
            dt.Columns.Add("age", typeof(string));                     //患者年龄   
            dt.Columns.Add("PatientId", typeof(string));               //患者住院号
            dt.Columns.Add("DIAGNOSE", typeof(string));                //患者主要诊断
            dt.Columns.Add("zhiliaomoshi", typeof(string));            //治疗模式
            dt.Columns.Add("xueyatonglu", typeof(string));             //血管通路
            dt.Columns.Add("lvqixinghao", typeof(string));             //过滤型号
            dt.Columns.Add("kangningfangshi", typeof(string));         //抗凝方式
            dt.Columns.Add("riqi", typeof(string));                    //日期
            dt.Columns.Add("shijian", typeof(string));                 //时间
            dt.Columns.Add("shengmingtizhengT", typeof(string));       //生命体征--T
            dt.Columns.Add("shengmingtizhengHR", typeof(string));      //生命体征--HR
            dt.Columns.Add("shengmingtizhengR", typeof(string));       //生命体征--R
            dt.Columns.Add("shengmingtizhengBP", typeof(string));      //生命体征BP
            dt.Columns.Add("yalijianceshuruya", typeof(string));       //压力检测--输入压
            dt.Columns.Add("yalijiancehuishuya", typeof(string));      //压力检测--回输压
            dt.Columns.Add("yalijianceTMP", typeof(string));           //压力检测--TMP
            dt.Columns.Add("chufangxueliuliang", typeof(string));      //处方--血流量
            dt.Columns.Add("chufangPBP", typeof(string));              //处方--PBP
            dt.Columns.Add("chufangtouxiye", typeof(string));          //处方--透析液
            dt.Columns.Add("chufangzhihuanyeqian", typeof(string));    //处方--置换液--前
            dt.Columns.Add("chufangzhihuanyehou", typeof(string));     //处方--置换液--后
            dt.Columns.Add("chufangtuoshuiliang", typeof(string));     //吃放--脱水量
            dt.Columns.Add("chufangkangningji", typeof(string));       //处方--抗凝剂
            dt.Columns.Add("bingqingguanchajichuli", typeof(string));  //病情观察及处理
            dt.Columns.Add("hushi", typeof(string));                   //护士
            dt.Columns.Add("shangyehushi", typeof(string));                   //上夜护士
            dt.Columns.Add("xiayehushi", typeof(string));                   //下夜护士
            dt.Columns.Add("num", typeof(string));                   //次数
            dt.Columns.Add("IsNewPageFlag", typeof(string));//另起一页
        }
        #endregion

        #region 窗体加载启动锐浪报表
        private void PrintPICCBoold_Load(object sender, EventArgs e)
        {
            axGRPrintViewer1.Start();
        }
        #endregion

        //根据加载的值来判断是否另起一页
        private void Report_PageProcessRecord()
        {
            IGRField ob = Report.FieldByName("IsNewPageFlag");
            if ((ob != null) && (ob.Value != null))
            {
                if (ob.Value.ToString().Contains("Y"))
                {
                    Report.ForceNewPage();//强制另起一页
                }
            }
        }
    }
}